int wiggleMaxLength(int* nums, int numsSize) {
    // step 1# 如果数组长度小于等于1，直接返回数组长度
    if(numsSize <= 1)
        return numsSize;

    // step 2# 初始化子序列长度为1
    int length = 1;

    // step 3# 初始化前一个差值(preDiff)和当前差值(curDiff)为0
    int preDiff , curDiff;
    preDiff = curDiff = 0;

    // step 4# 遍历数组，计算相邻元素的差值
    for(int i = 0; i < numsSize - 1; ++i) {
        // step 4.1# 计算当前元素与下一个元素的差值
        curDiff = nums[i+1] - nums[i];

        // step 4.2# 判断当前差值与前一个差值是否符号相反
        // 两种情况：
        //   - 当前curDiff为正且前一个preDiff为负或零
        //   - 当前curDiff为负且前一个preDiff为正或零
        if((curDiff > 0 && preDiff <= 0) || (preDiff >= 0 && curDiff < 0)) {
            preDiff = curDiff;   // step 4.3# 更新前一个差值为当前差值
            length++;            // step 4.4# 子序列长度加一
        }
    }

    // step 5# 返回最长摆动子序列的长度
    return length;
}
